e.Toscana 
Compliance Request for Comments: xxxxx
Del: xx/yy/zzzz 
Categoria: Applicativa
Destinatari: Regione Toscana, Amministrazioni locali 


Interrupt da fonti dati per il progetto ARPA (Autenticazione Ruoli Profili Applicazioni) 


Indice 
------
1. Contesto di riferimento	
2. Obiettivi	
3. Analisi 
4. Prodotti attesi
5. Bibliografia


1. Contesto di riferimento
==========================

Nell' ambito del progetto ARPA (Autenticazione Ruoli Profili Applicazioni) vengono definiti
dal componente role-manager i ruoli istituzionali e le fonti dati da interrogare
per l'attribuzione dei ruoli agli utenti loggati. La funzione delle fonti dati
 essenzialmente quella di fornire una valorizzazione degli attributi richiesti dal role-manager
per un certo utente (identificato dal proprio codice fiscale).
Le fonti dati restituiscono anche un periodo di validit dei valori richiesti.
Durante tale periodo di validit pu verificarsi una modifica dei valori di uno o pi attributi
all'interno della fonte dati per uno o pi utenti. Queste variazioni dovranno essere trasmesse al role-manager
che provveder a valutarne l'impatto sui ruoli ed a propagare
ai vari sottoscrittori le eventuali variazioni avvenute suoi ruoli.

2. Obiettivi
============ 

L'obiettivo di questa RFC  quello di descrivere le modalit di trasmissione e le caratteristiche del
messaggio che deve essere inviato dalle fonti dati al role-manager, secondo un meccanismo di "interrupt",
in seguito ad una variazione del valore di uno o pi attributi per uno o pi utenti all'interno
della fonte dati stessa. L'RFC descrive anche le modalit di trasmissione e le caratteristiche
del messaggio finale inerente i ruoli che il role-manager dovr propogare via CART ai vari sottoscrittori.

3. Analisi 
==========

3.1 Invocazione standard del web-services di interrupt del role-manager:
------------------------------------------------------------------------------
Il web-services predisposto sul role-manager per la ricezione dell'interrupt dalle fonti dati
ha le seguenti caratteristiche descritte in maniera java-like:

public String putVariazione(String xml).

L' xml in ingresso  descritto successivamente.
Il ws restituisce la stringa "ACK" in caso di successo.
Il ws restituisce la stringa "NACK" seguita da un messaggio di errore in caso di insuccesso.
In quest' ultimo caso la fonte dati riprover a contattare il web-services fino al successo
della trasmissione, eventualmente aspettando un certo periodo di tempo fra chiamate successive.




3.2 wsdl del web-services
-------------------------------------------
Per quanto esposto nel paragrafo precedente, il wsdl del web-services sar del seguente tipo:

<wsdl:definitions targetNamespace="http://ws.arpa.datapos.it">
<wsdl:message name="putVariazioneResponse">
<wsdl:part name="putVariazioneReturn" type="soapenc:string"/>
</wsdl:message>
<wsdl:message name="putVariazioneRequest">
<wsdl:part name="xml" type="soapenc:string"/>
</wsdl:message>
<wsdl:portType name="WSInterrupt">
<wsdl:operation name="putVariazione" parameterOrder="xml">
<wsdl:input message="impl:putVariazioneRequest" name="putVariazioneRequest"/>
<wsdl:output message="impl:putVariazioneResponse" name="putVariazioneResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="TestSoapBinding" type="impl:WSInterrupt">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="putVariazione">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="putVariazioneRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.arpa.datapos.it" use="encoded"/>
</wsdl:input>
<wsdl:output name="putVariazioneResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.arpa.datapos.it" use="encoded"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="WSInterruptService">
<wsdl:port binding="impl:TestSoapBinding" name="Test">
<wsdlsoap:address location="http://localhost:8083/rms/services/Test"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>


3.3 Schema XML di ingresso del metodo putVariazione(String xml)
-------------------------------------------
Lo schema XML  il seguente:

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

	<xs:element name="lista_variazioni">
		<xs:complexType>
			<xs:sequence>
			<xs:element ref="data_generazione" minOccurs="1" maxOccurs="1" />
			<xs:element ref="id_fonte_dati" minOccurs="1" maxOccurs="1" />
				<xs:element name="lista_attributi" minOccurs="1" maxOccurs="unbounded">
					<xs:complexType>
						<xs:sequence>
							<xs:element ref="CodiceFiscale" minOccurs="1"
								maxOccurs="1" />
							<xs:element ref="attributo" minOccurs="0"
								maxOccurs="unbounded" />
						</xs:sequence>
					</xs:complexType>
					<xs:key name="nomeattributo_Key">
						<xs:selector xpath="attributo" />
						<xs:field xpath="@nome" />
					</xs:key>
			
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>



	<xs:element name="CodiceFiscale" type="CodiceFiscale">
		<xs:annotation>
			<xs:documentation>
				identificativo dell'utente
			</xs:documentation>
		</xs:annotation>

	</xs:element>

	<xs:element name="attributo">
		<xs:annotation>
			<xs:documentation>
				denominazione, tipologia e valori dell'attributo
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:choice>
					<xs:element name="valore" minOccurs="0"
						maxOccurs="unbounded" type="xs:string">
					</xs:element>
					<xs:element name="number" type="xs:float"
						maxOccurs="unbounded" minOccurs="0">
					</xs:element>
					<xs:element name="dateTime" type="xs:dateTime"
						maxOccurs="unbounded" minOccurs="0">
					</xs:element>
				</xs:choice>
			<xs:element ref="fine_validita" minOccurs="1" maxOccurs="1" />
			</xs:sequence>
			<xs:attribute name="nome" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:minLength value="1" />

					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>

		</xs:complexType>

	</xs:element>

	<xs:element name="data_generazione" type="xs:dateTime">
		<xs:annotation>
			<xs:documentation>
				data di generazione delle informazioni fornite
			</xs:documentation>
		</xs:annotation>
	</xs:element>

	<xs:element name="fine_validita" type="xs:dateTime">
		<xs:annotation>
			<xs:documentation>
				data di fine validit delle informazioni fornite
			</xs:documentation>
		</xs:annotation>
	</xs:element>

	<xs:element name="id_fonte_dati">
		<xs:annotation>
			<xs:documentation>
				Identificativo della fonte dati
			</xs:documentation>
		</xs:annotation>
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:minLength value="1" />
				</xs:restriction>
			</xs:simpleType>
	</xs:element>

	<xs:simpleType name="CodiceFiscale">
		<xs:annotation>
			<xs:documentation>
				Codice fiscale del soggetto, si tratta di persona
				fisica.
			</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:string">
			<xs:length value="16"></xs:length>
			<xs:pattern
				value="[A-Za-z]{6}\d{2}[A-Za-z]{1}\d{2}[A-Za-z]{1}\d{3}[A-Za-z]{1}">
			</xs:pattern>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>



3.4 Esempio di XML di ingresso del metodo putVariazione(String xml)
-------------------------------------------
Di seguito un esempio di xml:

<?xml version="1.0" encoding="UTF-8"?>
<lista_variazioni xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="interrupt_da_fonte_dati.xsd">
	<data_generazione>2001-12-31T12:00:00</data_generazione>
	<id_fonte_dati>abcd</id_fonte_dati>
	<lista_attributi>
	<CodiceFiscale>BNCCLU75M11B950T</CodiceFiscale>
	<attributo nome="A1">
		<fine_validita>2012-12-31T12:00:00</fine_validita>
	</attributo>
	<attributo nome="A2">
		<valore>testo</valore>
		<valore>testo uno</valore>
		<fine_validita>2010-12-31T12:00:00</fine_validita>
	</attributo>
	<attributo nome="A3">
		<number>10.32</number>
		<number>10.34</number>
		<number>10.33</number>
		<number>10</number>
		<fine_validita>2011-12-31T12:00:00</fine_validita>
	</attributo>
	</lista_attributi>
	<lista_attributi>
	<CodiceFiscale>XYZZYX68D13D612E</CodiceFiscale>
	<attributo nome="A1">
		<valore>txt</valore>
		<valore>txt2</valore>
		<fine_validita>2012-12-31T12:00:00</fine_validita>
	</attributo>
	</lista_attributi>
</lista_variazioni>




3.5 Schema XML di uscita da parte del role-manager
-------------------------------------------
Lo schema XML  il seguente:

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

	<xs:element name="listaModifiche">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="listaRuoli" minOccurs="1" maxOccurs="unbounded">
					<xs:complexType>
						<xs:sequence>
							<xs:element ref="cf" minOccurs="1" maxOccurs="1" />
							<xs:element ref="ruolo" minOccurs="0" maxOccurs="unbounded" />
						</xs:sequence>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="cf">
		<xs:annotation>
			<xs:documentation>
				Codice fiscale del soggetto
			</xs:documentation>
		</xs:annotation>
		<xs:simpleType>
		<xs:restriction base="xs:string">
			<xs:length value="16"></xs:length>
			<xs:pattern
				value="[A-Za-z]{6}\d{2}[A-Za-z]{1}\d{2}[A-Za-z]{1}\d{3}[A-Za-z]{1}">
			</xs:pattern>
		</xs:restriction>
		</xs:simpleType>
	</xs:element>
	
	
	<xs:element name="ruolo">
		<xs:annotation>
			<xs:documentation>
				denominazione, appertenenza e valorizzazione degli attributi del ruolo
			</xs:documentation>
	   </xs:annotation>
	  <xs:complexType>
			<xs:sequence>
			<xs:element ref="attributo" minOccurs="0"
						maxOccurs="unbounded">
			</xs:element>
			</xs:sequence>
			<xs:attribute name="nome" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:minLength value="1" />
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="verifica" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:pattern value="true|false"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="fineValidita" use="required" type="xs:dateTime">
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	
	<xs:element name="attributo">
		<xs:annotation>
			<xs:documentation>
				attributo di un determinato ruolo e relativa valorizzazione
			</xs:documentation>
		</xs:annotation>
		<xs:complexType>
		<xs:sequence>
			<xs:element name="valore" minOccurs="1" maxOccurs="unbounded" type="xs:string">
			</xs:element>
		</xs:sequence>
		<xs:attribute name="nome" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:minLength value="1" />
					</xs:restriction>
				</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
  </xs:element>
	
</xs:schema>

3.4 Esempio di XML di uscita da parte del role-manager
-------------------------------------------
Di seguito un esempio di xml:

<?xml version="1.0" encoding="UTF-8"?>
<listaModifiche xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="interrupt_out_role.xsd">
	<listaRuoli>
	<cf>BNCCLU75M11B950T</cf>
	<ruolo nome="medico" verifica="true" fineValidita="2012-12-31T12:00:00">
		<attributo nome="asl">
			<valore>10h</valore>
			<valore>11b</valore>
		</attributo>
	</ruolo>
	<ruolo nome="dipendente RT" verifica="false" fineValidita="2010-12-31T12:00:00">
	</ruolo>
	</listaRuoli>
	<listaRuoli>
	<cf>XYZZYX60M11B950H</cf>
	<ruolo nome="dirigente" verifica="true" fineValidita="2012-12-31T12:00:00">
		<attributo nome="palazzo">
			<valore>A</valore>
		</attributo>
	</ruolo>
	<ruolo nome="specialista" verifica="false" fineValidita="2010-12-31T12:00:00">
	</ruolo>
	</listaRuoli>
</listaModifiche>



4. Prodotti attesi
==================
NN.


5. Bibliografia
===============

[1]	Regione Toscana, Infrastruttura per la Cooperazione Applicativa   C.A.R.T.
        Il Modello e l'Architettura, 02 Dicembre 2003
[2]	Regione Toscana, Infrastruttura per la Cooperazione Applicativa   C.A.R.T.
        Linee guida per lo sviluppo dei proxy applicativi, 02 Dicembre 2003
[3]	Regione Toscana, Proxy Developer Kit Ver. 1.5, 
        Infrastruttura per la Cooperazione Applicativa, 20 settembre 2004
[4]	Regione Toscana, Deployment di un'applicazione in ambiente NAL Ver. 1.8,
        ottobre 2004
[5]	Regione Toscana, Progetto A3 CART, Infrastruttura di servizi per la
        Cooperazione Applicativa, Giugno 2003
[6]	Regione Toscana, PETRA NAL - Kit per gli sviluppatori,
        Guida all'installazione Ver. 3.1.1,  Luglio 2004
[7]	RRTI Telecom-Sun-Siemens, ARPA - SPECIFICHE FUNZIONALI. 
	ver. 0.16a, luglio 2006
[8]	RTI Telecom-Sun-Siemens, ARPA - PROGETTAZIONE DELLE COMPONENTI SOFTWARE, 
	ver 0.5  dicembre 2006
[9]	RTI Telecom-Sun-Siemens, PROXY APPLICATIVO ARPAPROXY, v0.4, 10 ottobre 2007
